package gestionBDD;

import java.sql.* ;

import interne.Commande ;

public class requetesCommande {
		
	/*
	 * Ajoute une entrée dans la table Commande
	 * Entrée : Objet Commande avec tous les attributs remplie sauf la référence
	 * Infos : Pas de commit ici
	 */
	public static void ajouterCommande(Commande c) throws SQLException {
		try {
			String sql = "INSERT INTO COMMANDE (id_client, date, nom_dest, prenom_dest, adresse_dest) VALUES(?,?,?,?,?)";
			PreparedStatement statement = accesBDD.getInstance().prepareStatement(sql);
			statement.setObject(1, c.getIdClient());
			statement.setObject(2, c.getDate());
			statement.setObject(3, c.getNomDest());
			statement.setObject(4, c.getPrenomDest());
			statement.setObject(5, c.getAdresseDest());
			statement.executeUpdate();
			statement.close();
		}
		catch(SQLException e) {
			System.out.println(e) ;
		}
	}
	
	/*
	 * Cherche les détails d'une commande
	 * Entrée : Objet Commande avec id_client et date
	 */
	public static Commande trouverReference(Commande c) throws SQLException {
		try {
			String sql = "SELECT * FROM COMMANDE WHERE id_client = ? AND date = ?";
			PreparedStatement statement = accesBDD.getInstance().prepareStatement(sql);
			statement.setObject(1, c.getIdClient());
			statement.setObject(2, c.getDate());
            ResultSet rs = statement.executeQuery();
            rs.next();
            c.setReference(rs.getInt("REFERENCE"));
            c.setDate(rs.getTimestamp("DATE"));
            c.setNomDest(rs.getString("NOM_DEST"));
            c.setPrenomDest(rs.getString("PRENOM_DEST"));
            c.setAdresseDest(rs.getString("ADRESSE_DEST"));
			statement.close();
			return c ;
		}
		catch(SQLException e) {
			System.out.println("trouverReference() : " + e) ;
			return null ;
		}
	}
	
	/*
	 * Retourne le montant total d'une commande
	 * Entrée : Objet Commande avec la reference
	 */
	public static Float trouverMontant(Commande c) throws SQLException {
		try {
			String sql = "SELECT SUM(montant) FROM LIGNE_COMMANDE WHERE reference = ?";
			PreparedStatement statement = accesBDD.getInstance().prepareStatement(sql);
			statement.setObject(1, c.getReference());
            ResultSet rs = statement.executeQuery();
            rs.next();
            return rs.getFloat(1);
		}
		catch(Exception e) {
			System.out.println(e) ;
		}
		return null;
	}
	
	/*
	 * Cherche les détails d'une commande
	 * Entrée : Objet Commande avec la réference
	 */
	public static Commande trouverAvecReference(Commande c) throws SQLException {
		try {
			String sql = "SELECT * FROM COMMANDE WHERE reference = ?";
			PreparedStatement statement = accesBDD.getInstance().prepareStatement(sql);
			statement.setObject(1, c.getReference());
            ResultSet rs = statement.executeQuery();
            rs.next();
            c.setIdClient(rs.getInt("id_client"));
            c.setDate(rs.getTimestamp("DATE"));
            c.setMontantTotal(rs.getFloat("MONTANT_TOTAL"));
            c.setNomDest(rs.getString("NOM_DEST"));
            c.setPrenomDest(rs.getString("PRENOM_DEST"));
            c.setAdresseDest(rs.getString("ADRESSE_DEST"));
			statement.close();
			return c ;
		}
		catch(Exception e) {
			System.out.println(e) ;
			return null ;
		}	
	}
	
	/*
	 * Met à jour les détails d'une commande
	 * Entrée : Objet Commande avec la reference
	 * Infos : Commit ici
	 */
	public static void updateCommande(Commande c) throws SQLException {
		try {
			String sql = "UPDATE COMMANDE SET montant_total = ?, nom_dest = ?, prenom_dest = ?, adresse_dest = ? WHERE reference = ?";
			PreparedStatement statement = accesBDD.getInstance().prepareStatement(sql);
			statement.setObject(1, c.getMontantTotal());
			statement.setObject(2, c.getNomDest());
			statement.setObject(3, c.getPrenomDest());
			statement.setObject(4, c.getAdresseDest());
			statement.setObject(5, c.getReference());
			statement.executeUpdate();
			statement.close();
			accesBDD.getInstance().commit();
		}
		catch(SQLException e) {
			System.out.println(e);
		}
	}
}
